---
order: 3
title: 天空
type: 图形
group: 背景
label: Graphics/Background
---

天空是摄像机在渲染之前绘制的一种背景类型。此类型的背景对于 3D 游戏和应用程序非常有用，因为它可以提供深度感，使环境看上去比实际大小大得多。天空本身可以包含任何对象（例如云、山脉、建筑物和其他无法触及的对象）以营造遥远三维环境的感觉。Galacean 还可以将天空用于在场景中产生真实的环境光照，详情可参考[烘焙](/docs/graphics/light/bake/)。

天空模式下，开发者可以自行设置`材质`和`网格`，通过 Galacean 内置的`天空盒`与`程序化天空`可以一键设置期望的天空效果。

## 设置天空盒

在编辑器中，只需按照如下步骤即可为背景设置天空盒：

### 1. 创建天空盒纹理

> 可以在 [Poly Haven](https://polyhaven.com/) 或 [BimAnt HDRI](http://hdri.bimant.com/) 下载免费的 HDR 贴图

天空盒纹理就是一张[立方纹理](/docs/graphics/texture/cube/)，首先在准备好 HDR 后，依照路径 **[资产面板](/docs/assets/interface)** -> **右键上传** -> **选择 TextureCube(.hdr)** -> **选择对应 HDR 贴图** -> **立方纹理资产创建完毕** 操作即可。

<Image src="https://mdn.alipayobjects.com/huamei_yo47yq/afts/img/A*Oi3FSLEEaYgAAAAAAAAAAAAADhuCAQ/original" />

### 2. 创建天空盒材质

创建完立方纹理资产后，依照路径 **[资产面板](/docs/assets/interface)** -> **右键创建** -> **选择 Material** -> **选中生成的资产** -> **[检查器面板](/docs/interface/inspector)** -> **点击 Base 栏的 Shader 属性** -> **选择 Sky Box** -> **点击 Base 栏的 HDR** -> **选择第一步创建的立方纹理** 创建天空盒材质。

<Image src="https://mdn.alipayobjects.com/huamei_yo47yq/afts/img/A*9j2eSYkwg8MAAAAAAAAAAAAADhuCAQ/original" />

### 3. 设置天空盒

最后只需依照路径 **[层级面板](/docs/interface/hierarchy)** -> **选中 Scene** -> **[检查器面板](/docs/interface/inspector)** -> **Background 栏** -> **Mode 设置 Sky** -> **Material 选择第二步创建的材质** -> **Mesh 设置内置的 Cuboid** 可以看到场景的背景变成了天空盒。

<Image src="https://mdn.alipayobjects.com/huamei_yo47yq/afts/img/A*rqvsSpkGJ6UAAAAAAAAAAAAADhuCAQ/original" />

### 代码设置天空盒

```typescript
// 创建天空盒纹理
const textureCube = await engine.resourceManager.load<TextureCube>({
  urls: [
    "px - right 图片 url",
    "nx - left 图片 url",
    "py - top 图片 url",
    "ny - bottom 图片 url",
    "pz - front 图片 url",
    "nz - back 图片 url",
  ],
  type: AssetType.TextureCube,
});
// 创建天空盒材质
const skyMaterial = new SkyBoxMaterial(engine);
skyMaterial.texture = textureCube;
// 设置天空盒
const background = scene.background;
background.mode = BackgroundMode.Sky;
background.sky.material = skyMaterial;
background.sky.mesh = PrimitiveMesh.createCuboid(engine, 2, 2, 2);
```

## 设置程序化天空

程序化天空是编辑器在 3D 项目中的默认背景，您也可以依照路径 **[层级面板](/docs/interface/hierarchy)** -> **选中 Scene** -> **[检查器面板](/docs/interface/inspector)** -> **Background 栏** -> **Mode 设置 Sky** -> **Material 选择内置的 SkyMat 材质** -> **Mesh 设置内置的 Sphere**

<Image src="https://mdn.alipayobjects.com/huamei_yo47yq/afts/img/A*Qe3IRJ9ciNoAAAAAAAAAAAAADhuCAQ/original" />

### 代码设置程序化天空

```typescript
// 创建大气散射材质
const skyMaterial = new SkyProceduralMaterial(engine);
// 设置天空盒
const background = scene.background;
background.mode = BackgroundMode.Sky;
background.sky.material = skyMaterial;
background.sky.mesh = PrimitiveMesh.createSphere(engine);
```

### 属性

在大气散射材质的 **[检查器面板](/docs/interface/inspector)** 可以看到很多可调整的属性：

<Image src="https://mdn.alipayobjects.com/huamei_yo47yq/afts/img/A*igE-RLCRc24AAAAAAAAAAAAADhuCAQ/original" alt="image-4" style={{ zoom: "40%" }} />

> 内置的大气散射材质无法随意调整属性，开发者可以自行创建并调整。

| 属性名称                                                                    | 解释                                                                                                                                                   |
| :-------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
| [exposure](/apis/core/#SkyProceduralMaterial-exposure)                       | 天空的曝光，值越大天空越亮。                                                                                                                           |
| [sunMode](/apis/core/#SkyProceduralMaterial-sunMode)                         | 天空中生成太阳所使用的方法，包含 `None`，`Simple` 和 `HighQuality`，其中 None 不生成太阳，Simple 生成简单的太阳，而 HighQuality 生成可定义外观的太阳。 |
| [sunSize](/apis/core/#SkyProceduralMaterial-sunSize)                         | 太阳的尺寸，值越大太阳越大。                                                                                                                           |
| [sunSizeConvergence](/apis/core/#SkyProceduralMaterial-sunSizeConvergence)   | 太阳的大小收敛，当且仅当太阳的生成模式为 `HighQuality` 时有效                                                                                          |
| [atmosphereThickness](/apis/core/#SkyProceduralMaterial-atmosphereThickness) | 大气的密度，更高的密度会吸收更多的光线                                                                                                                 |
| [skyTint](/apis/core/#SkyProceduralMaterial-skyTint)                         | 天空的颜色                                                                                                                                             |
| [groundTint](/apis/core/#SkyProceduralMaterial-groundTint)                   | 地面的颜色                                                                                                                                             |
